lexer grammar AnalexANTLR;

options {
  language = Java;
}

@header {
    package practica6;
}


@members {
     private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
     public ArrayList<RecognitionException> getErrors() {
        return errors;
     }
     @Override
     public void reportError (RecognitionException e) {
        String msg = getErrorMessage(e, getTokenNames());
        System.err.println(msg);
        errors.add(e);
     }
}


BLANCO: (' '|'\t'|'\r\n') {skip();};
fragment DIGITO: '0'..'9';
fragment LETRA_MINUS: ('a'..'z')|'_';
fragment LETRA_MAYUS: ('A'..'Z')|'_';
GRAMMAR: 'grammar';
LEXER: 'lexer';
PARSER: 'parser';
OPTIONS: 'options';
HEADER: '@header';
PACKAGE: 'package';
MEMBERS: '@members';
NUMERO: (DIGITO)+('.'(DIGITO)+)?;
DOS_PUNTOS: ':';
TOKEN: (LETRA_MAYUS)*;
REGLA: (LETRA_MINUS)*;
PUNTO_COMA: ';';
PARENTESIS_A: '(';
PARENTESIS_C: ')';
LLAVE_A: '{';
LLAVE_C: '}';
IGUAL: '=';
ASTERISCO: '*';
INTERROG: '?';
OR: '|';
COMILLA: '\'';
IDENT: (LETRA_MAYUS|LETRA_MINUS)(LETRA_MAYUS|LETRA_MINUS|DIGITO)*;
CONTENIDO: COMILLA ((LETRA_MAYUS|LETRA_MINUS) (LETRA_MAYUS|LETRA_MINUS|DIGITO)*)COMILLA;
